﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Reglas_Negocio;
using Entidades;

namespace Control_Evaluacion
{
    public partial class frmEmpleado : Form
    {
        public bool seGuardo = false;
        empleados emp_parametro = null;
        public frmEmpleado(empleados emp_parametro )
        {
            this.emp_parametro = emp_parametro;
            InitializeComponent();
        }

        private void frmEmpleado_Load(object sender, EventArgs e)
        {
            listarcatalogos();
            Cargar_tipo_jornadas();
            if (emp_parametro != null)
                BuscarEmpleado(emp_parametro);
        }
        void Cargar_tipo_jornadas()
        {
            empresaBuilder.Listar_Combobox(cmb_empresa,"nombre");
            //cat_jornadaBuilder.Listar_Combobox(cmb_cat_jornada, "", "tipo_jor"); //id_jor!=1    ASOGOPAL
        }

        #region VALIDAR LOS CAMPOS
        bool ValidaCampos()
        {
	        bool r=true;

            //if (cmb_cat_jornada.SelectedIndex== -1)
            //{
            //    r = false;
            //    MessageBox.Show("Seleccione el tipo de jornada", "REGISTRO DATOS EMPLEADO");
            //}

	        if(txt_ci.TextLength==0)
	        {
		        r=false;
                MessageBox.Show("Ingrese número de identificación", "REGISTRO DATOS EMPLEADO");
	        }

	        if(txt_nom_cli.Text=="")
	        {
		        r=false;
		        MessageBox.Show("Ingrese el nombre del Empleado","REGISTRO DATOS EMPLEADO");
	        }
            if (txt_ape_cli.Text == "")
            {
                r = false;
                MessageBox.Show("Ingrese el apellido del Empleado", "REGISTRO DATOS EMPLEADO");
            }
            if (txt_dir_cli.Text == "")
            {
                r = false;
                MessageBox.Show("Ingrese la dirección del Empleado", "REGISTRO DATOS EMPLEADO");
            }
            if (txt_tel_cli.Text == "")
            {
                r = false;
                MessageBox.Show("Ingrese el teléfono del Empleado", "REGISTRO DATOS EMPLEADO");
            }
            if ((rbt_femenino.Checked == false)&&(rbt_masculino.Checked == false))
            {
                r = false;
                MessageBox.Show("Seleccione el genero del Empleado", "REGISTRO DATOS EMPLEADO");
            }
           
           return r;
        }
        #endregion
 
        #region Permitir Nuevo Registro
        void Nuevo()
        {
            txt_ci.Text="";
            txt_nom_cli.Text="";
            txt_ape_cli.Text="";
            txt_dir_cli.Text="";
            txt_tel_cli.Text="";
            //cbx_cargo.SelectedValue = "";
            rbt_femenino.Checked=false;
            //cbx_niv_acad.SelectedValue="";
            
            //pbx_foto_empleado.BackgroundImageLayout =ImageLayout.Stretch;
            //pbx_foto_empleado.BackgroundImage = global::Control_Evaluacion.Properties.Resources.Sin_foto;
            //pbx_foto_empleado.Image = Image.FromFile(@"D:\Documents\Visual Studio 2008\Projects\Control_Evaluacion\Control_Evaluacion\Resources\Sin foto.png");
     

            //cbx_estado_civil.SelectedValue = "";
            //txt_cargas_fam.Text="0";
            //cbx_cargas_familiares.Checked = false;

            //tsbtn_actualizar.Enabled = false;
            //tsbtn_eliminar_empleado.Enabled = false;
            lbl_IdEmp.Text = "0";

        }
        #endregion             

        #region LISTAR CATALOGOS
        void listarcatalogos() 
        {
            //CATALOGO DE CARGOS
            cat_cargosBuilder.Listar_Combobox(cbx_cargo, "", "nombre_cat_cargo");
            
            //CATALOGO DE NIVEL ACADEMICO            
            cat_nivel_academicoBuilder.Listar_Combobox(cbx_niv_acad, "", "nombre_cat_nivel_acad");

            //CATALOGO DE ESTADO CIVIL            
            cat_estado_civilBuilder.Listar_Combobox(cbx_estado_civil, "", "nombre_cat_estado_civil_emp");

            //CATALOGO DE TIPOS DE DOCUMENTOS DE IDENTIFICACION            
            cat_doc_identificacionBuilder.Listar_Combobox(cbx_tip_doc, "", "nom_cat_doc_iden");            
        }
        #endregion

        #region ABRIR CATALOGOS
        private void btn_agregar_estado_civil_Click(object sender, EventArgs e)
        {
            frmCatEstadoCivil fec = new frmCatEstadoCivil();
            fec.ShowDialog();            
            cat_estado_civilBuilder.Listar_Combobox(cbx_estado_civil, "", "nombre_cat_estado_civil_emp");         
        }

        //private void btn_add_cargo_Click_1(object sender, EventArgs e)
        //{
        //    frmCatCargos fcr = new frmCatCargos();
        //    fcr.ShowDialog();            
        //    cat_cargosBuilder.Listar_Combobox(cbx_cargo, "", "nombre_cat_cargo");               
        //}

        private void btn_add_niv_ac_Click(object sender, EventArgs e)
        {
            frmCatNivelAcademico fna = new frmCatNivelAcademico();
            fna.ShowDialog();           
            cat_nivel_academicoBuilder.Listar_Combobox(cbx_niv_acad, "", "nombre_cat_nivel_acad");
        }

        #endregion 


        //private void cbx_cargas_familiares_CheckedChanged(object sender, EventArgs e)
        //{
        //    if (cbx_cargas_familiares.Checked == true)
        //    {
        //        txt_cargas_fam.Text = "0";
        //        txt_cargas_fam.Enabled = true;
        //    }
        //    else
        //    {
        //        txt_cargas_fam.Enabled = false;
        //        txt_cargas_fam.Text = "0";
        //    }
        //}

        private void txt_ci_KeyPress(object sender, KeyPressEventArgs e)
        {

            if (Convert.ToInt32(cbx_tip_doc.SelectedValue) == 1)
            {
                txt_ci.MaxLength = 10;
                ValidarBuilder.NumeroTecla(e);
            }
            else
            {
                if (Convert.ToInt32(cbx_tip_doc.SelectedValue) == 2)
                {
                    txt_ci.MaxLength = 13;
                    ValidarBuilder.NumeroTecla(e);
                }
                else
                    txt_ci.MaxLength = 20;
            }
            if (e.KeyChar == 13)
            {
                empleados emp = empleadosBuilder.Recuperar(string.Format("cedula_emp = '{0}'", txt_ci.Text));
                
                if(emp.Id_emp!=0)
                    BuscarEmpleado(emp);
            }
        }
       
        private void txt_nom_cli_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarBuilder.LetraTecla(e);
        }

        private void txt_ape_cli_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarBuilder.LetraTecla(e);
        }

        private void tsbtn_guardar_Click(object sender, EventArgs e)
        {            
            try
            {
                bool guarda_ = false;
                bool actualiza = false;
                empleados tbEmp = new empleados();
                if (cbx_tip_doc.SelectedIndex == 0 || cbx_tip_doc.SelectedIndex == 1)
                {
                    if (ValidarBuilder.validarDocumento(txt_ci.Text))
                        guarda_ = true;
                    else
                        guarda_ = false;
                }
                else
                    guarda_ = true;

                if (ValidaCampos() && guarda_)
                {                   
                    string filtro = string.Format("cedula_emp='{0}'", txt_ci.Text);

                    if (empleadosBuilder.Existe(filtro))
                    {
                        if (MessageBox.Show("Ya existe un registro con este número de " + cbx_tip_doc.Text + "\nDesea Actualizar al registro existente????.... ", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                        {
                            actualiza = true;
                            tbEmp = empleadosBuilder.Recuperar(filtro);
                        }
                        else
                            actualiza = false;
                    }
                    else
                    {
                        tbEmp = new empleados();
                        actualiza = true;
                    }
                    if (actualiza)
                    {

                        tbEmp.Cedula_emp = txt_ci.Text;
                        tbEmp.Nombre_emp = txt_nom_cli.Text;
                        tbEmp.Apellido_emp = txt_ape_cli.Text;
                        tbEmp.Direccion_emp = txt_dir_cli.Text;
                        tbEmp.Telefono_emp = txt_tel_cli.Text;
                        tbEmp.Id_cat_cargo = Convert.ToInt32(cbx_cargo.SelectedValue);
                        if (rbt_masculino.Checked == true)
                            tbEmp.Genero_emp = Convert.ToString(rbt_masculino.Text);

                        if (rbt_femenino.Checked == true)
                            tbEmp.Genero_emp = Convert.ToString(rbt_femenino.Text);

                        tbEmp.Id_cat_nivel_acad = Convert.ToInt32(cbx_niv_acad.SelectedValue);
                        tbEmp.Fecha_nac_emp = dtp_fec_nac.Value;
                        //tbEmp.Fecha_contrato_emp = dtp_fec_cont.Value;
                        tbEmp.Id_cat_estado_civil_emp = Convert.ToInt32(cbx_estado_civil.SelectedValue);
                        //tbEmp.Cargas_familiares_emp = Convert.ToInt32(txt_cargas_fam.Text);
                        tbEmp.Id_cat_doc_identificacion = Convert.ToInt32(cbx_tip_doc.SelectedValue);
                        //guardar la imagen
                        MemoryStream ms = new MemoryStream();
                        //pbx_foto_empleado.BackgroundImage.Save(ms, pbx_foto_empleado.BackgroundImage.RawFormat);
                        tbEmp.Foto_emp = ms.GetBuffer();

                        if (chkHabilitado.Checked)
                            tbEmp.Estado_emp = 1;
                        else
                            tbEmp.Estado_emp = 0;

                        tbEmp.Fecha_salida_emp = DateTime.Now;

                        //if (!chk_control_acceso.Checked)                        
                        //    cmb_cat_jornada.Text = "ESPECIAL";
                           
                            //tbEmp.Cat_jor_id_fk_emp = Convert.ToInt32(cmb_cat_jornada.SelectedValue);

                        tbEmp.Id_empr_fk = Convert.ToInt32(cmb_empresa.SelectedValue);

                        //tbEmp.Emp_controla_salida = chk_control_acceso.Text;
                        //if (txt_minutos_atraso.TextLength == 0)
                        //    txt_minutos_atraso.Text = "0";
                        //if (txt_minutos_ingreso.TextLength == 0)
                        //    txt_minutos_ingreso.Text = "0";
                        //if (txt_minutos_salida.TextLength == 0)
                        //    txt_minutos_salida.Text = "0";

                        //tbEmp.Emp_controla_salida = chk_control_acceso.Text;
                        //tbEmp.Emp_entrada_especial = chk_emp_especial.Text;

                        //tbEmp.Nro_horas_atraso = Convert.ToInt32(txt_minutos_atraso.Text );
                        //tbEmp.Nro_horas_ingreso = Convert.ToInt32(txt_minutos_ingreso.Text);
                        //tbEmp.Nro_horas_salida = Convert.ToInt32(txt_minutos_salida.Text);

                        seGuardo = true;

                        empleadosBuilder.GrabarViaProcedimiento(tbEmp);

                        empleados tbEmp_rec = empleadosBuilder.Recuperar(filtro);
                        lbl_IdEmp.Text = tbEmp_rec.Id_emp.ToString();

                        //MessageBox.Show("Registro realizado con exito", "Registro Empleados", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        //if (chk_emp_especial.Checked)
                        //    Guardar_Carga_Horario_Especial(tbEmp_rec.Id_emp);
                        //else
                        //{
                        //    if (tbEmp_rec.Cat_jor_id_fk_emp != 1)
                        //    {
                        //        horario_empresaBuilder.Actualizar_Estado_ViaSql("id_emp_hora_fk = " + lbl_IdEmp.Text + " AND cat_jor_id_fk=" + cmb_cat_jornada.SelectedValue + " AND caduca_hora='no' ", "VIGENTE", "no");
                        //    }
                        //    else
                        //    {
                        //        MessageBox.Show("Confirmar la actualización de las rotaciones de la semana");
                        //        rottur.frmModificaConfiguracion rotacion_manual_ = new rottur.frmModificaConfiguracion();                                
                        //        rotacion_manual_.ShowDialog();
                        //    }
                        //}
                    }
                }
            }

            catch (Exception ex)
            {
                throw ex;
            }

        }

        void Guardar_Carga_Horario_Especial(int id_cod_emp)
        {
            try
            {
                horario_empresaBuilder.Actualizar_Estado_ViaSql("id_emp_hora_fk = " + id_cod_emp + " AND cat_jor_id_fk!=3 AND caduca_hora='no' ", "NO VIGENTE", "si");
                horario_empresaBuilder.Actualizar_Estado_ViaSql("id_emp_hora_fk = " + id_cod_emp + " AND cat_jor_id_fk=3 ", "VIGENTE", "no");

                if (!horario_empresaBuilder.Existe("id_emp_hora_fk = " + id_cod_emp + " AND cat_jor_id_fk=3"))
                {
                    horario_empresa objCargHor = new horario_empresa();
                    cat_jornada cat_jornada_ = cat_jornadaBuilder.Recuperar("tipo_jor='ESPECIAL'");

                    for (int i = 1; i <= 7; i++)
                    {
                        objCargHor = new horario_empresa();
                        objCargHor.Hora_inicio_hora = cat_jornada_.Hora_ini_matutina;
                        objCargHor.Hora_fin_hora = cat_jornada_.Hora_fin_matutina;
                        objCargHor.Jornada = "MATUTINA";
                        objCargHor.Nombre_hora = ValidarBuilder.DevuelveDiaSemana(i);
                        objCargHor.Id_hora = 0;
                        objCargHor.Id_emp_hora_fk = id_cod_emp;
                        objCargHor.Estado_hora = "VIGENTE";
                        objCargHor.Caduca_hora = "no";
                        //objCargHor.Cat_jor_id_fk = Convert.ToInt32(cmb_cat_jornada.SelectedValue);
                        objCargHor.Fecha_registro_hora = DateTime.Now;
                        horario_empresaBuilder.GrabarViaSql(objCargHor, false);

                        objCargHor = new horario_empresa();
                        objCargHor.Hora_inicio_hora = cat_jornada_.Hora_ini_vespertina;
                        objCargHor.Hora_fin_hora = cat_jornada_.Hora_fin_vespertina;
                        objCargHor.Jornada = "VESPERTINA";
                        objCargHor.Nombre_hora = ValidarBuilder.DevuelveDiaSemana(i);
                        objCargHor.Id_hora = 0;
                        objCargHor.Id_emp_hora_fk = id_cod_emp;
                        objCargHor.Estado_hora = "VIGENTE";
                        objCargHor.Caduca_hora = "no";
                        //objCargHor.Cat_jor_id_fk = Convert.ToInt32(cmb_cat_jornada.SelectedValue);
                        objCargHor.Fecha_registro_hora = DateTime.Now;
                        horario_empresaBuilder.GrabarViaSql(objCargHor, false);

                        objCargHor = new horario_empresa();
                        objCargHor.Hora_inicio_hora = cat_jornada_.Hora_ini_nocturna;
                        objCargHor.Hora_fin_hora = cat_jornada_.Hora_fin_nocturna;
                        objCargHor.Jornada = "NOCTURNA";

                        int dia_sig = i + 1;
                        if (dia_sig > 7)
                            dia_sig = 1;

                        objCargHor.Nombre_hora = ValidarBuilder.DevuelveDiaSemana(i) + "-" + ValidarBuilder.DevuelveDiaSemana(dia_sig);
                        objCargHor.Id_hora = 0;
                        objCargHor.Id_emp_hora_fk = id_cod_emp;
                        objCargHor.Estado_hora = "VIGENTE";
                        objCargHor.Caduca_hora = "no";
                        //objCargHor.Cat_jor_id_fk = Convert.ToInt32(cmb_cat_jornada.SelectedValue);
                        objCargHor.Fecha_registro_hora = DateTime.Now;
                        horario_empresaBuilder.GrabarViaSql(objCargHor, false);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("No ingresado " + ex.Message);
            }
        }

        private void txt_cargas_fam_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarBuilder.NumeroTecla(e);
        }

        private void btn_imagen_Click_1(object sender, EventArgs e)
        {
            OpenFileDialog BuscarImagen = new OpenFileDialog();

            //BuscarImagen
            BuscarImagen.Filter = "Image Files(*.BMP;*.JPG;*.PNG)|*.BMP;*.JPG;*.PNG";

            BuscarImagen.DefaultExt = "jpg";
            BuscarImagen.InitialDirectory = @"C:\Mis imagenes";
            BuscarImagen.Multiselect = false;

            //if (BuscarImagen.ShowDialog() == DialogResult.OK)
            //{
            //    pbx_foto_empleado.BackgroundImage = Image.FromFile(BuscarImagen.FileName);
            //    MemoryStream ms2 = new MemoryStream();
            //    pbx_foto_empleado.BackgroundImage.Save(ms2, pbx_foto_empleado.BackgroundImage.RawFormat);
            //    if (ms2.GetBuffer().LongLength > 1048574)
            //    {
            //        pbx_foto_empleado.BackgroundImage = null;
            //        MessageBox.Show("IMAGEN MUY EXTENSA");
            //    }
            //}
        }

        private void tsbtn_buscar_empleado_Click(object sender, EventArgs e)
        {
            //frmTablaBusquedas frmTB = new frmTablaBusquedas();
            //frmTB.ShowDialog();
            //if (frmTB.empleado_parametro != null)
            //    BuscarEmpleado(frmTB.empleado_parametro);
        }

        #region BUSQUEDA DE EMPLEADO
        public void BuscarEmpleado(empleados e)
        {
            cbx_tip_doc.SelectedValue = e.Id_cat_doc_identificacion;
            txt_ci.Text = e.Cedula_emp;
            txt_nom_cli.Text = e.Nombre_emp;
            txt_ape_cli.Text = e.Apellido_emp;
            txt_dir_cli.Text = e.Direccion_emp;
            txt_tel_cli.Text = e.Telefono_emp;
            lbl_IdEmp.Text = e.Id_emp.ToString();
            cbx_cargo.SelectedValue = e.Id_cat_cargo;
            //cmb_cat_jornada.SelectedValue = e.Cat_jor_id_fk_emp;

            if (e.Estado_emp == 1)
                chkHabilitado.Checked = true;
            else
                chkHabilitado.Checked = false;

            if (e.Genero_emp == "Femenino")
                rbt_femenino.Checked = true;
            if (e.Genero_emp == "Masculino")
                rbt_masculino.Checked = true;

            cbx_niv_acad.SelectedValue = e.Id_cat_nivel_acad;
            //dtp_fec_cont.Value = e.Fecha_contrato_emp;
            dtp_fec_nac.Value = e.Fecha_nac_emp;
            cbx_estado_civil.SelectedValue = e.Id_cat_estado_civil_emp;
            //txt_cargas_fam.Text = Convert.ToString(e.Cargas_familiares_emp);
            cmb_empresa.SelectedValue = e.Id_empr_fk;

            //if (e.Foto_emp != null)
            //{
            //    MemoryStream ms = new MemoryStream(e.Foto_emp);
            //    pbx_foto_empleado.BackgroundImage = Image.FromStream(ms);
            //}

            //if (e.Emp_controla_salida.Equals("si"))
            //    chk_control_acceso.Checked = true;
            //if (e.Emp_controla_salida.Equals("no"))
            //    chk_control_acceso.Checked = false;

            //if (e.Emp_entrada_especial.Equals("si"))
            //    chk_emp_especial.Checked = true;
            //if (e.Emp_entrada_especial.Equals("no"))
            //    chk_emp_especial.Checked = false;

            //txt_minutos_atraso.Text = e.Nro_horas_atraso.ToString();
            //txt_minutos_ingreso.Text = e.Nro_horas_ingreso.ToString();
            //txt_minutos_salida.Text = e.Nro_horas_salida.ToString();
        }
        #endregion            

        private void btn_add_tip_doc_iden_Click(object sender, EventArgs e)
        {
            frmCatDocIdentifica fdi = new frmCatDocIdentifica();
            fdi.ShowDialog();             
            cat_doc_identificacionBuilder.Listar_Combobox(cbx_tip_doc, "", "nom_cat_doc_iden");       
        }

        //private void btn_carga_horaria_empleado_Click(object sender, EventArgs e)
        //{
        //    //if (chk_control_acceso.Checked && !cmb_cat_jornada.Text.Equals("ESPECIAL"))
        //    //{
        //        if (!lbl_IdEmp.Text.Equals("0"))
        //        {
        //            frmHorario_Empresa ch_ = new Control_Evaluacion.frmHorario_Empresa(empleadosBuilder.Recuperar("id_emp=" + lbl_IdEmp.Text));
        //            ch_.ShowDialog();
        //        }
        //    //}
        //}

        private void btn_registrar_huella_Click(object sender, EventArgs e)
        {
            if (!lbl_IdEmp.Text.Equals("0"))
            {
                FINGER.frmRegistraHuella rg_h = new Control_Evaluacion.FINGER.frmRegistraHuella(Convert.ToInt32(lbl_IdEmp.Text));
                rg_h.ShowDialog();
            }
        }

        private void tsbtnNuevo_Click(object sender, EventArgs e)
        {
            Nuevo();
        }

        //private void btn_salario_Click(object sender, EventArgs e)
        //{
        //    if (!lbl_IdEmp.Text.Equals("0"))
        //    {
        //        frm_registra_salario ch_ = new frm_registra_salario(empleadosBuilder.Recuperar("id_emp=" + lbl_IdEmp.Text));
        //        ch_.ShowDialog();
        //    }
        //}

        //private void toolStripButton1_Click(object sender, EventArgs e)
        //{
        //    if (!lbl_IdEmp.Text.Equals("0"))
        //    {
        //        frmRegistroUsuarios ch_ = new frmRegistroUsuarios(empleadosBuilder.Recuperar("id_emp=" + lbl_IdEmp.Text));
        //        ch_.ShowDialog();
        //    }
        //}

        //private void chk_control_acceso_CheckedChanged(object sender, EventArgs e)
        //{
        //    if (chk_control_acceso.Checked)
        //        chk_control_acceso.Text = "si";
        //    else
        //        chk_control_acceso.Text = "no";
        //}

        //private void chk_emp_especial_CheckedChanged(object sender, EventArgs e)
        //{
        //    if (chk_emp_especial.Checked)
        //        chk_emp_especial.Text = "si";
        //    else
        //        chk_emp_especial.Text = "no";
        //}

        //private void tsbtn_vacaciones_Click(object sender, EventArgs e)
        //{
        //    if (!lbl_IdEmp.Text.Equals("0"))
        //    {
        //        frm_registra_vacacion ch_ = new frm_registra_vacacion(empleadosBuilder.Recuperar("id_emp=" + lbl_IdEmp.Text));
        //        ch_.ShowDialog();
        //    }
        //}

        //private void toolStripButton4_Click(object sender, EventArgs e)
        //{
        //    if (!lbl_IdEmp.Text.Equals("0"))
        //    {
        //        ADMINISTRACION.frmComisionesRegistraEntrada ch_ = new ADMINISTRACION.frmComisionesRegistraEntrada(empleadosBuilder.Recuperar("id_emp=" + lbl_IdEmp.Text));
        //        ch_.ShowDialog();
        //    }
        //}

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }             
    }
}
